package com.shenshen.Unit;

import java.util.HashSet;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;

public class RandomUtil {
	/*
	 **
	 * 随机工具类
	 * 
	 * @author 45466
	 *
	 */

	static String STR = "";
	static {
		STR = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
	}

	/**
	 * 功能：获取随机正整数
	 *
	 */
	public static int nextInt() {
		// TODO 实现代码
		ThreadLocalRandom t = ThreadLocalRandom.current();
		int nextInt = t.nextInt();
		return nextInt > 0 ? nextInt : -nextInt;
	}

	/**
	 * 功能：获取指定最大范围的随机正整数
	 * 
	 * @return 随机数
	 */
	public static int nextInt(int min, int max) {

		// TODO 实现代码
		ThreadLocalRandom t = ThreadLocalRandom.current();
		return t.nextInt(min, max);

	}

	/**
	 * 功能：在最小值与最大值之间截取随机数 场景：在List集合中截取多个的随机记录。 注意：返回的结果不能有重复值
	 *
	 * @param int min 起始值。
	 * @param int max 结束值。
	 * @return 多个随机数
	 */
	public static int[] subIntegers(int min, int max, int subLength) {
		// TODO 实现代码
		ThreadLocalRandom t = ThreadLocalRandom.current();

		HashSet<Integer> set = new HashSet<Integer>();
		// 只要set集合当中数据小于需求的个数 就一直获取
		int n = 0;
		while (set.size() < subLength) {
			System.out.println("n is " + (n++));
			int nextInt = t.nextInt(min, max);
			set.add(nextInt);
		}

		int[] arr = new int[subLength];
		int i = 0;
		for (int ranomInt : set) {
			arr[i++] = ranomInt;
		}
		return arr;
	}

	/**
	 * 功能：获取1-9,a-Z之间的随机字符，即包括数字或字母(含大小写)的字符
	 *
	 * @return 随机字符
	 */
	public static char nextCharacter() {
		// TODO 实现代码
		// 0-9 a-z A-Z
		ThreadLocalRandom t = ThreadLocalRandom.current();
		int nextInt = t.nextInt(62);
		if (nextInt <= 9)
			return (char) ('0' + nextInt);

		if (nextInt <= 35)
			return (char) ('A' - 10 + nextInt);

		return (char) ('a' - 36 + nextInt);

	}

	/**
	 * 功能：获取指定长度的随机字符数 场景：创建验证码
	 *
	 * @param int length 长度。
	 * @return 随机字符串
	 */
	public static String nextString(int length) {
		// TODO 实现代码
		ThreadLocalRandom t = ThreadLocalRandom.current();
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < length; i++) {
			// 随机数值
			int nextInt = t.nextInt(62);
			sb.append(STR.charAt(nextInt));
		}

		return sb.toString();
	}

	/**
	 * 功能：获取不带横线的UUID
	 * 
	 */
	public static String uuid() {
		// TODO 实现代码
		String uuidStr = UUID.randomUUID().toString();
		uuidStr = uuidStr.replaceAll("_", "");
		uuidStr = uuidStr.replaceAll("-", "");
		return uuidStr;

	}

}
